--- 模块功能：SSD 1306驱动芯片 I2C屏幕显示测试
-- @author openLuat
-- @module ui.mono_i2c_ssd1306
-- @license MIT
-- @copyright openLuat
-- @release 2018.07.03

module(..., package.seeall)
require "sys"
require "i2c"
require "nvm"

nvm.init("config.lua", true)

local alertVolume = tonumber(nvm.get("alertVolume"))

local function getSendDataHex(volume)
    local sendDataDec = volume * 1.27
    local integerSendData = tonumber(string.split(tostring(sendDataDec), ".")[1])
    local decimal = sendDataDec - integerSendData
    if decimal - 0.5 >= 0 then
        return tonumber(string.format('%#x', integerSendData + 1))
    else
        return tonumber(string.format('%#x', integerSendData))
    end
end


-- i2cid 1,2,3对应硬件的I2C1,I2C2,I2C3
-- 之前的i2cid为0不再使用
local i2cid = 2

local i2cslaveaddr = 0x2F
--注意：此处的i2cslaveaddr是7bit地址
--如果i2c外设手册中给的是8bit地址，需要把8bit地址右移1位，赋值给i2cslaveaddr变量
--如果i2c外设手册中给的是7bit地址，直接把7bit地址赋值给i2cslaveaddr变量即可
--发起一次读写操作时，启动信号后的第一个字节是命令字节
--命令字节的bit0表示读写位，0表示写，1表示读
--命令字节的bit7-bit1,7个bit表示外设地址
--i2c底层驱动在读操作时，用 (i2cslaveaddr << 1) | 0x01 生成命令字节
--i2c底层驱动在写操作时，用 (i2cslaveaddr << 1) | 0x00 生成命令字节

--[[
函数名：i2cAdjustVol
功能  ：打开i2c，实现调节声音功能
参数  ：无
返回值：无
说明  : 此函数演示setup、send和recv接口的使用方式
]]
function i2cAdjustVol()
    local i2cInitNum = i2c.setup(i2cid, i2c.SLOW, i2cslaveaddr)
    if i2cInitNum ~= i2c.SLOW then
        print("testI2c.init fail")
        return
    end
    --获取发给从设备的十六进制数据
    local val = getSendDataHex(alertVolume)
    log.info("val:",val)
    i2c.send(i2cid, i2cslaveaddr, val)
    i2c.close(i2cid)
end
--sys.taskInit(i2cAdjustVol)
sys.timerLoopStart(function() i2cAdjustVol() end, 5000)

